package com.odontosis.view.backup;

import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.odontosis.service.UsuarioService;
import com.odontosis.util.BackupMySql;
import com.odontosis.view.OdontosisAction;

public class AcaoBackup extends OdontosisAction<UsuarioService> {
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		FormBackup formulario = (FormBackup) form;		
		if(!StringUtils.isEmpty(formulario.getMetodo()))
		{
			if(formulario.getMetodo().equals("aplicar")) {
				
				return onAplicar(mapping, form, request, response);
				
			} else if(formulario.getMetodo().equals("gerar")) {
				
				return onExecutar(mapping, form, request, response);
				
			}
			
			
		}
		return super.execute(mapping, form, request, response);
		
	}
	
	public ActionForward onExecutar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		FormBackup formulario = (FormBackup) form;
		String end = formulario.getEndereco();
		try {
			String arquivogerado =BackupMySql.gerarBackup(end);
			Collection<String> sucesso = new ArrayList<String>();
			sucesso.add("Backup gerado com Sucesso.\n Arquivo gerado " + arquivogerado);
			request.setAttribute("sucesso", sucesso);
			request.setAttribute("mensagens", null);
		} catch (Exception e) {
			Collection<String> erros = new ArrayList<String>();
			erros.add("Problema ao gerar backup, verifique se o caminho digitado é válido.");
			request.setAttribute("mensagens", erros);
			request.setAttribute("sucesso", null);
		}
		

		return mapping.getInputForward();
	}
	
	public ActionForward onAplicar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		FormBackup formulario = (FormBackup) form;
		
		if(formulario.getArquivo() == null || formulario.getArquivo().getFileName().trim().isEmpty()) {
			Collection<String> erros = new ArrayList<String>();
			erros.add("O campo Arquivo é obrigatório para aplicar o script à base de dados.");
			request.setAttribute("mensagens", erros);
		} else {
		
			try {
				BackupMySql.restore(formulario.getArquivo().getFileData());
				Collection<String> sucesso = new ArrayList<String>();
				sucesso.add("Script Aplicado com sucesso a base de dados local.");
				sucesso.add("Reinicie o Servidor de aplicação.");
				request.setAttribute("sucesso", sucesso);
				request.setAttribute("mensagens", null);
			} catch (Exception e) {
				Collection<String> erros = new ArrayList<String>();
				erros.add("Problema ao aplicar script, verifique se arquivo informado é válido.");
				request.setAttribute("mensagens", erros);
				request.setAttribute("sucesso", null);
			}
		
		}
	
		return mapping.getInputForward();
	}
}
